exception Requete_en_cours
exception Pas_de_requete
type reponse =
  | Accepte | Refuse | Erreur
type 'carte partie
val est_connecte: 'carte partie -> bool
val string_of_joueur: 'carte partie -> string
val joueurs_disponibles: 'carte partie -> string list
val mes_adversaires: 'carte partie -> string array
val en_jeu: 'carte partie -> bool
val mon_numero: 'carte partie -> int option
val enchere_de: 'carte partie -> int -> int option
val preneur: 'carte partie -> int option
val carte_appelee: 'carte partie -> 'carte option
val ecart_connu: 'carte partie -> 'carte list option
val mon_jeu: 'carte partie -> 'carte list
val chien: 'carte partie -> 'carte list
val repartition_cartes: ('carte -> 'carte -> bool) -> 
			'carte -> 'carte -> 'carte partie 
			-> (int * 'carte * int) list
(* (carte_sup_large) -> excuse -> fausse_excuse -> partie *)
(* -> [(poseur, carte, gagnant)] *)
val joueur_maitre: ('carte -> 'carte -> bool) -> 'carte partie -> int option
(* idem *)
val nombre_plis_joues: 'carte partie -> int
val pli_termine: 'carte partie -> bool
val couleur_demandee: ('carte -> 'couleur) -> 'carte 
		       -> 'carte partie -> 'couleur option
(* (couleur_of_carte) -> excuse -> partie -> couleur_ouverture *)
val joueur_ouverture: 'carte partie -> int
val requete_en_cours: 'carte partie -> bool
val doit_priser: 'carte partie -> bool
val enchere_maximale: 'carte partie -> int * int (* preneur * enchère *)
val doit_appeler: 'carte partie -> bool
val doit_ecarter: 'carte partie -> bool
val devant_jouer: 'carte partie -> int
(* n'a pas de sens hors partie *)
val doit_jouer: 'carte partie -> bool
val plus_gros_atout: ('carte -> bool) -> ('carte -> 'valeur) -> 'carte partie -> 'valeur option
(* est_atout valeur_of_carte partie, plus gros atout sur le tapis *)
val cartes_jouables: ('carte -> bool) -> ('carte -> int) -> 
		     ('carte -> 'couleur) -> 'carte ->
		     'carte partie -> 'carte list
(* (est_atout) -> (valeur_of_carte) -> (couleur_of_carte) -> *)
(* excuse -> partie -> cartes_jouables*)
val make: unit -> 'carte partie
val traiter_reponse: 'carte partie -> (reponse -> unit) -> unit
val assimiler_requete_deconnecter: 'carte partie -> unit
val assimiler_requete_identifier: 'carte partie -> string -> unit
val assimiler_requete_inviter: 'carte partie -> string list -> unit
val assimiler_requete_prise: 'carte partie -> int -> unit
val assimiler_requete_appel: 'carte partie -> 'carte -> unit
val assimiler_requete_ecart: 'carte partie -> 'carte list -> unit
val assimiler_requete_carte: 'carte partie -> 'carte -> unit
val assimiler_information_erreur: 'carte partie -> unit
val assimiler_information_connexion: 'carte partie -> unit
val assimiler_information_deconnexion: 'carte partie -> unit
val assimiler_information_entree: 'carte partie -> string -> unit
val assimiler_information_sortie: 'carte partie -> string -> unit
val assimiler_information_noms: 'carte partie -> string array -> unit
val assimiler_information_numero: 'carte partie -> int -> unit
val assimiler_information_contrat: 'carte partie -> int -> unit
val assimiler_information_appel: 'carte partie -> unit
val assimiler_information_contrat_final: ('carte -> string) ->
					 'carte partie -> int -> 
					 int -> 'carte -> unit
(* (string_of_carte) -> partie -> preneur -> contrat -> carte appelée *)
val assimiler_information_atout_au_chien: 'carte partie -> 'carte list -> unit
val assimiler_information_jeu: 'carte partie -> unit
val assimiler_information_distribution: ('carte -> int) -> 'carte partie -> 'carte list -> unit
val assimiler_information_chien: ('carte -> int) -> 'carte partie -> 'carte list -> unit
val assimiler_information_pli: 'carte partie -> int -> unit
val assimiler_information_carte: 'carte partie -> 'carte -> unit
